<?php

namespace EchoPHP\Database\Connectors;

use PDO;

class Connector {

    /**
     * 默认PDO连接选项
     *
     * @var array
     */
    protected $options = [
        PDO::ATTR_CASE => PDO::CASE_LOWER,            //进行列名大小写转换
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,    //连接出错抛出异常
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,    //默认不进行空和null的转换
        PDO::ATTR_STRINGIFY_FETCHES => false,           //不将数字转换为字符串
    ];

    /**
     * 创建pdo连接
     * @param $dsn
     * @param string $username
     * @param string $password
     * @param array $option 连接参数
     * @return PDO
     */
    public function createConnection($dsn, string $username, string $password, array $option) {
        return new PDO($dsn, $username, $password, $option);
    }

    /**
     * 带入连接参数合并默认连接参数，返回最终的连接参数
     * @param array $options
     * @return array
     */
    public function getOptions($options) {
        if (!is_array($options)) {
            return $this->options;
        }
        return array_diff_key($this->options, $options) + $options;
    }

    /**
     * 获取默认连接参数
     * @return array
     */
    public function getDefaultOptions() {
        return $this->options;
    }

    /**
     * 设置默认连接参数
     * @param array $options
     */
    public function setDefaultOptions(array $options) {
        $this->options = $options;
    }

    /**
     * 补充默认连接参数，同名覆盖
     * @param array $options
     */
    public function addDefaultOptions(array $options) {
        $this->options = array_diff_key($this->options, $options) + $options;
    }

}